// step 1# 自定义比较函数：按区间的左端点从小到大排序
int cmp(const void *a, const void *b) {
    return (*(int**)a)[0] - (*(int**)b)[0];
}

// step 2# 主函数：最少需要删除多少个区间使区间互不重叠
int eraseOverlapIntervals(int** intervals, int intervalsSize, int* intervalsColSize) {
    // step 2.1# 边界处理：没有区间直接返回0
    if(intervalsSize == 0) {
        return 0;
    }
    
    // step 2.2# 按区间左端点升序排序
    qsort(intervals, intervalsSize, sizeof(int*), cmp);
    
    // step 2.3# 初始化
    int count = 0;             // step 2.3.1# 记录需要删除的区间数量
    int end = intervals[0][1]; // step 2.3.2# 当前保留区间的右端点

    // step 2.4# 遍历区间数组
    for(int i = 1; i < intervalsSize; i++) {
        // step 2.4.1# 出现重叠
        if(intervals[i][0] < end) {
            count++; // 删除一个区间
            // step 2.4.2# 更新end为当前两个重叠区间中较小的右端点
            end = end < intervals[i][1] ? end : intervals[i][1];
        }
        // step 2.4.3# 没有重叠，正常推进
        else {
            end = intervals[i][1];
        }
    }
    
    // step 2.5# 返回需要删除的区间数量
    return count;
}
